Basic Nipype#

Author: Steffen Bollmann

Output CPU information#

%%bash
cat /proc/cpuinfo | grep 'vendor' | uniq
cat /proc/cpuinfo | grep 'model name' | uniq
vendor_id	: AuthenticAMD
model name	: AMD EPYC 7763 64-Core Processor

Demonstrating the module system in Python and Nipype#

# we can use module to load fsl in a specific version
import module
await module.load('fsl/6.0.4')
await module.list()
['Lmod',
 'Warning:',
 'The',
 'environment',
 'MODULEPATH',
 'has',
 'been',
 'changed',
 'in',
 'unexpected',
 'ways.',
 'Lmod',
 'is',
 'unable',
 'to',
 'use',
 'given',
 'MODULEPATH.',
 'It',
 'is',
 'using:',
 '"/cvmfs/neurodesk.ardc.edu.au/neurodesk-modules/functional_imaging:/cvmfs/neurodesk.ardc.edu.au/neurodesk-modules/rodent_imaging:/cvmfs/neurodesk.ardc.edu.au/neurodesk-modules/image_registration:/cvmfs/neurodesk.ardc.edu.au/neurodesk-modules/structural_imaging:/cvmfs/neurodesk.ardc.edu.au/neurodesk-modules/image_segmentation:/cvmfs/neurodesk.ardc.edu.au/neurodesk-modules/quantitative_imaging:/cvmfs/neurodesk.ardc.edu.au/neurodesk-modules/workflows:/cvmfs/neurodesk.ardc.edu.au/neurodesk-modules/hippocampus:/cvmfs/neurodesk.ardc.edu.au/neurodesk-modules/image_reconstruction:/cvmfs/neurodesk.ardc.edu.au/neurodesk-modules/data_organisation:/cvmfs/neurodesk.ardc.edu.au/neurodesk-modules/electrophysiology:/cvmfs/neurodesk.ardc.edu.au/neurodesk-modules/phase_processing:/cvmfs/neurodesk.ardc.edu.au/neurodesk-modules/programming:/cvmfs/neurodesk.ardc.edu.au/neurodesk-modules/machine_learning:/cvmfs/neurodesk.ardc.edu.au/neurodesk-modules/diffusion_imaging:/cvmfs/neurodesk.ardc.edu.au/neurodesk-modules/body:/cvmfs/neurodesk.ardc.edu.au/neurodesk-modules/visualization:/cvmfs/neurodesk.ardc.edu.au/neurodesk-modules/spectroscopy:/cvmfs/neurodesk.ardc.edu.au/neurodesk-modules/quality_control:/cvmfs/neurodesk.ardc.edu.au/neurodesk-modules/statistics:/cvmfs/neurodesk.ardc.edu.au/neurodesk-modules/shape_analysis:/cvmfs/neurodesk.ardc.edu.au/neurodesk-modules/spine:/cvmfs/neurodesk.ardc.edu.au/neurodesk-modules/molecular_biology:/cvmfs/neurodesk.ardc.edu.au/neurodesk-modules/bids_apps:/cvmfs/neurodesk.ardc.edu.au/neurodesk-modules/cryo_EM::".',
 'Please',
 'use',
 '"module',
 'use',
 'to',
 'change',
 'MODULEPATH',
 'instead.',
 'fsl/6.0.4']
from nipype.interfaces.fsl.base import Info
print(Info.version())
# if the FSL version is changed using module above, the kernel of the notebook needs to be restarted!
None
!bet
Usage:    bet <input> <output> [options]

Main bet2 options:
  -o          generate brain surface outline overlaid onto original image
  -m          generate binary brain mask
  -s          generate approximate skull image
  -n          don't generate segmented brain image output
  -f <f>      fractional intensity threshold (0->1); default=0.5; smaller values give larger brain outline estimates
  -g <g>      vertical gradient in fractional intensity threshold (-1->1); default=0; positive values give larger brain outline at bottom, smaller at top
  -r <r>      head radius (mm not voxels); initial surface sphere is set to half of this
  -c <x y z>  centre-of-gravity (voxels not mm) of initial mesh surface.
  -t          apply thresholding to segmented brain image and mask
  -e          generates brain surface as mesh in .vtk format

Variations on default bet2 functionality (mutually exclusive options):
  (default)   just run bet2
  -R          robust brain centre estimation (iterates BET several times)
  -S          eye & optic nerve cleanup (can be useful in SIENA - disables -o option)
  -B          bias field & neck cleanup (can be useful in SIENA)
  -Z          improve BET if FOV is very small in Z (by temporarily padding end slices)
  -F          apply to 4D FMRI data (uses -f 0.3 and dilates brain mask slightly)
  -A          run bet2 and then betsurf to get additional skull and scalp surfaces (includes registrations)
  -A2 <T2>    as with -A, when also feeding in non-brain-extracted T2 (includes registrations)

Miscellaneous options:
  -v          verbose (switch on diagnostic messages)
  -h          display this help, then exits
  -d          debug (don't delete temporary intermediate images)

Load afni and SPM as well#

await module.load('afni/22.3.06')
await module.load('spm12/r7771')
await module.list()
Lmod Warning: The environment MODULEPATH has been changed in unexpected ways.
Lmod is unable to use given MODULEPATH. It is using:

"/cvmfs/neurodesk.ardc.edu.au/neurodesk-modules/functional_imaging:/cvmfs/neurodesk.ardc.edu.au/neurodesk-modules/rodent_imaging:/cvmfs/neurodesk.ardc.edu.au/neurodesk-modules/image_registration:/cvmfs/neurodesk.ardc.edu.au/neurodesk-modules/structural_imaging:/cvmfs/neurodesk.ardc.edu.au/neurodesk-modules/image_segmentation:/cvmfs/neurodesk.ardc.edu.au/neurodesk-modules/quantitative_imaging:/cvmfs/neurodesk.ardc.edu.au/neurodesk-modules/workflows:/cvmfs/neurodesk.ardc.edu.au/neurodesk-modules/hippocampus:/cvmfs/neurodesk.ardc.edu.au/neurodesk-modules/image_reconstruction:/cvmfs/neurodesk.ardc.edu.au/neurodesk-modules/data_organisation:/cvmfs/neurodesk.ardc.edu.au/neurodesk-modules/electrophysiology:/cvmfs/neurodesk.ardc.edu.au/neurodesk-modules/phase_processing:/cvmfs/neurodesk.ardc.edu.au/neurodesk-modules/programming:/cvmfs/neurodesk.ardc.edu.au/neurodesk-modules/machine_learning:/cvmfs/neurodesk.ardc.edu.au/neurodesk-modules/diffusion_imaging:/cvmfs/neurodesk.ardc.edu.au/neurodesk-modules/body:/cvmfs/neurodesk.ardc.edu.au/neurodesk-modules/visualization:/cvmfs/neurodesk.ardc.edu.au/neurodesk-modules/spectroscopy:/cvmfs/neurodesk.ardc.edu.au/neurodesk-modules/quality_control:/cvmfs/neurodesk.ardc.edu.au/neurodesk-modules/statistics:/cvmfs/neurodesk.ardc.edu.au/neurodesk-modules/shape_analysis:/cvmfs/neurodesk.ardc.edu.au/neurodesk-modules/spine:/cvmfs/neurodesk.ardc.edu.au/neurodesk-modules/molecular_biology:/cvmfs/neurodesk.ardc.edu.au/neurodesk-modules/bids_apps:/cvmfs/neurodesk.ardc.edu.au/neurodesk-modules/cryo_EM::".

Please use "module use ..." to change MODULEPATH instead. 



Lmod Warning: The environment MODULEPATH has been changed in unexpected ways.
Lmod is unable to use given MODULEPATH. It is using:

"/cvmfs/neurodesk.ardc.edu.au/neurodesk-modules/functional_imaging:/cvmfs/neurodesk.ardc.edu.au/neurodesk-modules/rodent_imaging:/cvmfs/neurodesk.ardc.edu.au/neurodesk-modules/image_registration:/cvmfs/neurodesk.ardc.edu.au/neurodesk-modules/structural_imaging:/cvmfs/neurodesk.ardc.edu.au/neurodesk-modules/image_segmentation:/cvmfs/neurodesk.ardc.edu.au/neurodesk-modules/quantitative_imaging:/cvmfs/neurodesk.ardc.edu.au/neurodesk-modules/workflows:/cvmfs/neurodesk.ardc.edu.au/neurodesk-modules/hippocampus:/cvmfs/neurodesk.ardc.edu.au/neurodesk-modules/image_reconstruction:/cvmfs/neurodesk.ardc.edu.au/neurodesk-modules/data_organisation:/cvmfs/neurodesk.ardc.edu.au/neurodesk-modules/electrophysiology:/cvmfs/neurodesk.ardc.edu.au/neurodesk-modules/phase_processing:/cvmfs/neurodesk.ardc.edu.au/neurodesk-modules/programming:/cvmfs/neurodesk.ardc.edu.au/neurodesk-modules/machine_learning:/cvmfs/neurodesk.ardc.edu.au/neurodesk-modules/diffusion_imaging:/cvmfs/neurodesk.ardc.edu.au/neurodesk-modules/body:/cvmfs/neurodesk.ardc.edu.au/neurodesk-modules/visualization:/cvmfs/neurodesk.ardc.edu.au/neurodesk-modules/spectroscopy:/cvmfs/neurodesk.ardc.edu.au/neurodesk-modules/quality_control:/cvmfs/neurodesk.ardc.edu.au/neurodesk-modules/statistics:/cvmfs/neurodesk.ardc.edu.au/neurodesk-modules/shape_analysis:/cvmfs/neurodesk.ardc.edu.au/neurodesk-modules/spine:/cvmfs/neurodesk.ardc.edu.au/neurodesk-modules/molecular_biology:/cvmfs/neurodesk.ardc.edu.au/neurodesk-modules/bids_apps:/cvmfs/neurodesk.ardc.edu.au/neurodesk-modules/cryo_EM::".

Please use "module use ..." to change MODULEPATH instead.
['Lmod',
 'Warning:',
 'The',
 'environment',
 'MODULEPATH',
 'has',
 'been',
 'changed',
 'in',
 'unexpected',
 'ways.',
 'Lmod',
 'is',
 'unable',
 'to',
 'use',
 'given',
 'MODULEPATH.',
 'It',
 'is',
 'using:',
 '"/cvmfs/neurodesk.ardc.edu.au/neurodesk-modules/functional_imaging:/cvmfs/neurodesk.ardc.edu.au/neurodesk-modules/rodent_imaging:/cvmfs/neurodesk.ardc.edu.au/neurodesk-modules/image_registration:/cvmfs/neurodesk.ardc.edu.au/neurodesk-modules/structural_imaging:/cvmfs/neurodesk.ardc.edu.au/neurodesk-modules/image_segmentation:/cvmfs/neurodesk.ardc.edu.au/neurodesk-modules/quantitative_imaging:/cvmfs/neurodesk.ardc.edu.au/neurodesk-modules/workflows:/cvmfs/neurodesk.ardc.edu.au/neurodesk-modules/hippocampus:/cvmfs/neurodesk.ardc.edu.au/neurodesk-modules/image_reconstruction:/cvmfs/neurodesk.ardc.edu.au/neurodesk-modules/data_organisation:/cvmfs/neurodesk.ardc.edu.au/neurodesk-modules/electrophysiology:/cvmfs/neurodesk.ardc.edu.au/neurodesk-modules/phase_processing:/cvmfs/neurodesk.ardc.edu.au/neurodesk-modules/programming:/cvmfs/neurodesk.ardc.edu.au/neurodesk-modules/machine_learning:/cvmfs/neurodesk.ardc.edu.au/neurodesk-modules/diffusion_imaging:/cvmfs/neurodesk.ardc.edu.au/neurodesk-modules/body:/cvmfs/neurodesk.ardc.edu.au/neurodesk-modules/visualization:/cvmfs/neurodesk.ardc.edu.au/neurodesk-modules/spectroscopy:/cvmfs/neurodesk.ardc.edu.au/neurodesk-modules/quality_control:/cvmfs/neurodesk.ardc.edu.au/neurodesk-modules/statistics:/cvmfs/neurodesk.ardc.edu.au/neurodesk-modules/shape_analysis:/cvmfs/neurodesk.ardc.edu.au/neurodesk-modules/spine:/cvmfs/neurodesk.ardc.edu.au/neurodesk-modules/molecular_biology:/cvmfs/neurodesk.ardc.edu.au/neurodesk-modules/bids_apps:/cvmfs/neurodesk.ardc.edu.au/neurodesk-modules/cryo_EM::".',
 'Please',
 'use',
 '"module',
 'use',
 'to',
 'change',
 'MODULEPATH',
 'instead.',
 'fsl/6.0.4',
 'afni/22.3.06',
 'spm12/r7771']

download test data#

%%bash
if [ -f ./sub-01_ses-01_7T_T1w_defaced.nii ]; then
    echo "nii Output file exists, not downloading or unpacking again"
else
    if [ ! -f ./sub-01_ses-01_7T_T1w_defaced.nii.gz  ]; then
        echo "nii.gz does not exist. So, it needs to be downloaded."
        osfURL="osfstorage/TOMCAT_DIB/sub-01/ses-01_7T/anat/sub-01_ses-01_7T_T1w_defaced.nii.gz"
        echo "downloading now ..."
        osf -p bt4ez fetch $osfURL ./sub-01_ses-01_7T_T1w_defaced.nii.gz
    fi

    if [  -f ./sub-01_ses-01_7T_T1w_defaced.nii.gz ]; then
        echo "nii.gz exists. So, it needs to be unpacked and deleted"
        echo "unpacking now ..."
        gunzip ./sub-01_ses-01_7T_T1w_defaced.nii.gz
    fi
fi
nii.gz does not exist. So, it needs to be downloaded.
downloading now ...
nii.gz exists. So, it needs to be unpacked and deleted
unpacking now ...
  0%|          | 0.00/72.7M [00:00<?, ?bytes/s]
  0%|          | 49.2k/72.7M [00:00<05:45, 210kbytes/s]
  0%|          | 81.9k/72.7M [00:00<06:46, 179kbytes/s]
  0%|          | 147k/72.7M [00:00<04:01, 301kbytes/s]
  0%|          | 197k/72.7M [00:00<03:29, 346kbytes/s]
  0%|          | 279k/72.7M [00:00<02:39, 453kbytes/s]
  1%|          | 410k/72.7M [00:00<01:47, 674kbytes/s]
  1%|          | 557k/72.7M [00:00<01:21, 889kbytes/s]
  1%|          | 786k/72.7M [00:01<00:56, 1.27Mbytes/s]
  2%|▏         | 1.11M/72.7M [00:01<00:39, 1.81Mbytes/s]
  2%|▏         | 1.57M/72.7M [00:01<00:27, 2.60Mbytes/s]
  3%|▎         | 2.26M/72.7M [00:01<00:18, 3.82Mbytes/s]
  4%|▍         | 3.23M/72.7M [00:01<00:12, 5.52Mbytes/s]
  6%|▋         | 4.57M/72.7M [00:01<00:08, 7.84Mbytes/s]
  9%|▉         | 6.55M/72.7M [00:01<00:05, 11.4Mbytes/s]
 12%|█▏        | 8.54M/72.7M [00:01<00:04, 13.8Mbytes/s]
 15%|█▍        | 10.6M/72.7M [00:01<00:03, 15.9Mbytes/s]
 18%|█▊        | 12.7M/72.7M [00:02<00:03, 16.8Mbytes/s]
 21%|██        | 15.1M/72.7M [00:02<00:03, 18.8Mbytes/s]
 23%|██▎       | 17.0M/72.7M [00:02<00:03, 18.1Mbytes/s]
 27%|██▋       | 19.6M/72.7M [00:02<00:02, 19.2Mbytes/s]
 30%|██▉       | 21.7M/72.7M [00:02<00:02, 19.3Mbytes/s]
 33%|███▎      | 23.9M/72.7M [00:02<00:02, 19.4Mbytes/s]
 36%|███▌      | 26.0M/72.7M [00:02<00:02, 19.9Mbytes/s]
 39%|███▊      | 28.2M/72.7M [00:02<00:02, 19.4Mbytes/s]
 42%|████▏     | 30.5M/72.7M [00:02<00:02, 20.6Mbytes/s]
 45%|████▍     | 32.6M/72.7M [00:03<00:02, 19.7Mbytes/s]
 48%|████▊     | 35.0M/72.7M [00:03<00:01, 20.0Mbytes/s]
 51%|█████     | 37.1M/72.7M [00:03<00:01, 19.5Mbytes/s]
 54%|█████▍    | 39.2M/72.7M [00:03<00:01, 19.7Mbytes/s]
 57%|█████▋    | 41.4M/72.7M [00:03<00:01, 20.1Mbytes/s]
 60%|█████▉    | 43.5M/72.7M [00:03<00:01, 19.7Mbytes/s]
 63%|██████▎   | 45.7M/72.7M [00:03<00:01, 18.7Mbytes/s]
 66%|██████▋   | 48.2M/72.7M [00:03<00:01, 20.3Mbytes/s]
 69%|██████▉   | 50.2M/72.7M [00:03<00:01, 20.3Mbytes/s]
 72%|███████▏  | 52.5M/72.7M [00:03<00:00, 20.9Mbytes/s]
 75%|███████▌  | 54.6M/72.7M [00:04<00:00, 20.9Mbytes/s]
 78%|███████▊  | 56.7M/72.7M [00:04<00:00, 19.9Mbytes/s]
 81%|████████  | 58.7M/72.7M [00:04<00:00, 19.8Mbytes/s]
 84%|████████▍ | 61.0M/72.7M [00:04<00:00, 20.5Mbytes/s]
 87%|████████▋ | 63.0M/72.7M [00:04<00:00, 14.8Mbytes/s]
 89%|████████▉ | 64.8M/72.7M [00:04<00:00, 14.0Mbytes/s]
 94%|█████████▍| 68.4M/72.7M [00:04<00:00, 18.9Mbytes/s]
 97%|█████████▋| 70.5M/72.7M [00:05<00:00, 16.5Mbytes/s]
100%|█████████▉| 72.6M/72.7M [00:05<00:00, 17.0Mbytes/s]
100%|██████████| 72.7M/72.7M [00:05<00:00, 14.0Mbytes/s]
%ls 
sub-01_ses-01_7T_T1w_defaced.nii

run nipype pipeline#

%%capture
!pip install nibabel numpy scipy
from nipype.interfaces import fsl
from nipype.interfaces import afni

btr = fsl.BET()
btr.inputs.in_file = './sub-01_ses-01_7T_T1w_defaced.nii'
btr.inputs.frac = 0.4
btr.inputs.out_file = './sub-01_ses-01_7T_T1w_defaced_brain.nii'
res = btr.run() 

edge3 = afni.Edge3()
edge3.inputs.in_file = './sub-01_ses-01_7T_T1w_defaced.nii'
edge3.inputs.out_file = './sub-01_ses-01_7T_T1w_defaced_edges.nii'
edge3.inputs.datum = 'byte'
res = edge3.run()
250609-00:14:54,310 nipype.interface WARNING:
	 FSLOUTPUTTYPE environment variable is not set. Setting FSLOUTPUTTYPE=NIFTI
250609-00:15:06,258 nipype.interface INFO:
	 stderr 2025-06-09T00:15:06.258664:++ 3dedge3: AFNI version=AFNI_22.3.06 (Nov 15 2022) [64-bit]
250609-00:15:06,259 nipype.interface INFO:
	 stderr 2025-06-09T00:15:06.259783:** AFNI converts NIFTI_datatype=4 (INT16) in file /tmp/tmpq7z8ufha/sub-01_ses-01_7T_T1w_defaced.nii to FLOAT32
250609-00:15:06,260 nipype.interface INFO:
	 stderr 2025-06-09T00:15:06.259783:     Warnings of this type will be muted for this session.
250609-00:15:06,260 nipype.interface INFO:
	 stderr 2025-06-09T00:15:06.259783:     Set AFNI_NIFTI_TYPE_WARN to YES to see them all, NO to see none.
250609-00:15:06,261 nipype.interface INFO:
	 stderr 2025-06-09T00:15:06.261493:*+ WARNING:   If you are performing spatial transformations on an oblique dset,
250609-00:15:06,262 nipype.interface INFO:
	 stderr 2025-06-09T00:15:06.261493:  such as /tmp/tmpq7z8ufha/sub-01_ses-01_7T_T1w_defaced.nii,
250609-00:15:06,262 nipype.interface INFO:
	 stderr 2025-06-09T00:15:06.261493:  or viewing/combining it with volumes of differing obliquity,
250609-00:15:06,263 nipype.interface INFO:
	 stderr 2025-06-09T00:15:06.261493:  you should consider running:
250609-00:15:06,264 nipype.interface INFO:
	 stderr 2025-06-09T00:15:06.261493:     3dWarp -deoblique
250609-00:15:06,264 nipype.interface INFO:
	 stderr 2025-06-09T00:15:06.261493:  on this and  other oblique datasets in the same session.
250609-00:15:06,265 nipype.interface INFO:
	 stderr 2025-06-09T00:15:06.261493: See 3dWarp -help for details.
250609-00:15:06,265 nipype.interface INFO:
	 stderr 2025-06-09T00:15:06.261493:++ Oblique dataset:/tmp/tmpq7z8ufha/sub-01_ses-01_7T_T1w_defaced.nii is 1.253358 degrees from plumb.
%ls
sub-01_ses-01_7T_T1w_defaced.nii
sub-01_ses-01_7T_T1w_defaced_brain.nii.gz
sub-01_ses-01_7T_T1w_defaced_edges.nii
# View 3D data
import matplotlib.pyplot as plt

def view_slices_3d(image_3d, slice_nbr, vmin, vmax, title=''):
#   print('Matrix size: {}'.format(image_3d.shape))
  fig = plt.figure(figsize=(15, 4))
  plt.suptitle(title, fontsize=10)

  plt.subplot(131)
  plt.imshow(np.take(image_3d, slice_nbr, 2), vmin=vmin, vmax=vmax, cmap='gray')
  plt.title('Axial');

  plt.subplot(132)
  image_rot = ndimage.rotate(np.take(image_3d, slice_nbr, 1),90)
  plt.imshow(image_rot, vmin=vmin, vmax=vmax, cmap='gray')
  plt.title('Coronal');

  plt.subplot(133)
  image_rot = ndimage.rotate(np.take(image_3d, slice_nbr, 0),90)
  plt.imshow(image_rot, vmin=vmin, vmax=vmax, cmap='gray')
  plt.title('Sagittal');
  cbar=plt.colorbar()

def get_figure():
    """
    Returns figure and axis objects to plot on. 
    """
    fig, ax = plt.subplots(1)
    plt.tick_params(top=False, right=False, which='both') 
    ax.spines['top'].set_visible(False)
    ax.spines['right'].set_visible(False)
    return fig, ax
import nibabel as nib
from matplotlib import transforms
from scipy import ndimage
import numpy as np

# load data
brain_full = nib.load('./sub-01_ses-01_7T_T1w_defaced.nii').get_fdata()
brain = nib.load('./sub-01_ses-01_7T_T1w_defaced_brain.nii.gz').get_fdata()
edges = nib.load('./sub-01_ses-01_7T_T1w_defaced_edges.nii').get_fdata()
view_slices_3d(brain_full, slice_nbr=230, vmin=0, vmax=4000, title='Brain and Skull')
view_slices_3d(brain, slice_nbr=230, vmin=0, vmax=4000, title='Brain Extracted')
view_slices_3d(edges, slice_nbr=230, vmin=0, vmax=1000, title='Edges')
_images/ce2a6fd373835d876532ba1006e6a81cc6dc284c3483bfa79e7139aa7a5102f2.png _images/c1cb7bf236a70505fd7be45c1f660ad54f4dd44de71df0af711874463cf21c92.png _images/1c622612e6b91def9e45dec8b36ec92e033858862d7f79f35f20f6d5d1095d4a.png
from ipyniivue import NiiVue

nv = NiiVue()
nv.load_volumes([{"path": "./sub-01_ses-01_7T_T1w_defaced_brain.nii.gz"}])
nv
from IPython.display import Image
Image(url='https://raw.githubusercontent.com/NeuroDesk/example-notebooks/refs/heads/main/books/images/sub-01_ses-01_7T_T1w_defaced_brain.png')

SPM can also be used in such a workflow, but unfortunately, this will trigger a warning “stty: ‘standard input’: Inappropriate ioctl for device”, which you can ignore (or help us to find out where it comes from):

import nipype.interfaces.spm as spm

norm12 = spm.Normalize12()
norm12.inputs.image_to_align = './sub-01_ses-01_7T_T1w_defaced.nii'
norm12.run()
stty: 'standard input': Inappropriate ioctl for device
stty: 'standard input': Inappropriate ioctl for device
<nipype.interfaces.base.support.InterfaceResult at 0x7f1995e45e10>
brain_full = nib.load('./wsub-01_ses-01_7T_T1w_defaced.nii').get_fdata()
view_slices_3d(brain_full, slice_nbr=50, vmin=0, vmax=4000, title='Brain normalized to MNI space')
_images/e4173e89a177917817ad469619437917c096a60884453f649c18bf7aae05ef8c.png
nv = NiiVue()
nv.load_volumes([{"path": "./wsub-01_ses-01_7T_T1w_defaced.nii"}])
nv
Image(url='https://raw.githubusercontent.com/NeuroDesk/example-notebooks/refs/heads/main/books/images/wsub-01_ses-01_7T_T1w_defaced.png')